# demoDesignPattern **Repository Path**: emptypty/demoDesignPattern ## Basic Information - **Project Name**: demoDesignPattern - **Description**: demoDesignPattern - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-03-11 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # demoDesignPattern ### 设计模式六大原则 - 单一职责(SRP) Single Responsibility Principle - 一个类只负责一个功能领域的相应职责,即就一个类而言,应该只有一个引起它变化的原因 - 核心就是控制类的大小 高内聚 低耦合 - 开闭原则(OCP) Open Close Principle - 对修改关闭 对扩展开放 - 可以通过 “抽象约束、封装变化” 来实现开闭原则 - 里氏替换原则(LSP) Liskov Substitution Principle - 所有引用基类(父类)的地方必须能透明地使用其子类的对象, 子类可以扩展父类的功能,但不能改变父类原有的功能。 - 接口隔离原则(ISP) Interface Segregation Principle - 客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。 - 依赖倒置原则(DIP) Dependence Inversion Principle - 抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而非针对实现编程 - 迪米特法则(DP) Demeter Principle - 一个软件实体应当尽可能少地与其他实体发生作用 ### 介绍 demoDesignPattern 设计模式DEMO #### 创建型 - 单例模式 >> 类只能有一个实例,提供一个全局的访问点 - SingletonPattern - 原型模式 >> 通过复制现有的实例来创建新的实例 - PrototypePattern - 建造者模式 >> 封装一个复杂对象的构建过程,并可以按步骤构造 - BuilderPattern - 工厂模式 >> 一个工厂类根据传入的参量决定创建出那一种产品类的实例 - 抽象接口 Cooking - 具体实现类 FishCooking MeatCooking TomatoCooking - 工厂类 CookingFactory - 抽象工厂模式 >> 创建相关或依赖对象的家族,而无需明确指定具体类 - 抽象工厂 LunchCookingFactory - 具体工厂 LibaiLunchCookingFactory TaibaiLunchCookingFactory - 抽象产品 FishCooking RiceCooking - 具体产品 LiBaiFishCookingImpl LiBaiRiceCookingImpl TaiBaiFishCookingImpl TaiBaiRiceCookingImpl ##### 单元测试用例 TestCreational --- #### 结构型 - 适配器模式 >> 将一个类的方法接口转换成客户希望的另外一个接口 - 类适配器 - 目标接口 adaptee TypeCPowerBankAdaptee - 适配者 target LightingTarget - 适配器 adapter ClazzLightingAdapter(通过继承) - 对象适配器 - 目标接口 adaptee TypeCPowerBankAdaptee - 适配者 target LightingTarget - 适配器 adapter ObjectLightingAdapter(通过组合) - 接口适配器 通过继承抽象类 - 目标接口 adaptee TypeCPowerBankAdaptee - 适配者 target MultiConvertTarget - 抽象适配器 abstractAdapter AbstractLightingAdapter - 具体适配器 adapter InterfaceLightingAdapter(通过继承抽象类) - 桥接模式 >> 将抽象部分和它的实现部分分离,使它们都可以独立的变化 - 实现化接口 CookingStylesInterface - 具体实现化 SteamedCookingStyles BraiseCookingStyles - 抽象化抽象类 AbstractFishCooking - 扩展抽象化 BridgeFishCooking - 组合模式 >> 将对象组合成树形结构以表示“”部分-整体“”的层次结构 - 透明方式(树叶构件实现空的add(), remove()方法) - 抽象构件 Component AbstractCompanyComponent - 树枝构件 Composite ConcreteCompositeCompany - 树叶构件 Leaf FinanceDepartmentLeaf HrDepartmentLeaf - 安全模式(树叶构件没有add(),remove()方法, 不透明) - 抽象构件 Component - 树枝构件 Composite - 树叶构件 Leaf - 装饰模式 >> 动态的给对象添加新的功能 - 抽象构件 Component CakeComponent - 具体构件 ConcreteComponent FruitCakeComponent - 抽象装饰 Decorator AbstractFruitDecorator - 具体装饰 ConcreteDecorator AppleDecoratorAbstract MangoDecoratorAbstract StrawberryDecoratorAbstract - 外观模式 >> 对外提供一个统一的方法,来访问子系统中的一群接口 - 外观 Facade TMallElfFacade - 子系统 SubSystem TvSub LightSub AirConditioningSub - 享元模式(轻量级模式) >> 通过共享技术来有效的支持大量细粒度的对象 - 抽象享元 Flyweight Rifle - 具体享元 Concrete Flyweight ShootingRifle 、SniperRifle - 非享元 Unsharable Flyweight Sight - 享元工厂 Flyweight Factory RifleFactory - 代理模式 >> 为其他对象提供一个代理以便控制这个对象的访问 - 抽象主题 Subject DrinkSubject - 真实主题 Real Subject DrinkRealSubject - 代理类 Proxy DrinkProxy ##### 单元测试用例 TestStructural #### 行为型 (模板方法模式和解释器模式是类行为型模式,其他的全部属于对象行为型模式) - 模板方法模式 >> 定义一个算法结构,而将一些步骤延迟到子类实现 - 抽象类 AbstractClass AbstractFruitCake - 具体子类 ConcreteClass ConcreteMangoCake ConcreteStrawberryCake - 解释器模式 >> 给定一个语言,定义它的文法的一种表示,并定义一个解释器 - 抽象表达式 Abstract Expression Expression AbstractOperationExpression - 终结符表达式 Terminal Expression VarTerminalExpression - 非终结符表达式 Nonterminal Expression SubOperationExpression AddOperationExpression - 环境 Context CalculatorContext - 策略模式 >> 定义一系列算法,把他们封装起来,并且使它们可以相互替换 - 抽象策略 Strategy CookingCarpStrategy - 具体策略 ConcreteStrategy BraisedCarpStrategy、 SoupCarpStrategy - 环境 Context CookingStyleContext - 策略工厂 Factory StrategyFactory - 状态模式 >> 允许一个对象在其对象内部状态改变时改变它的行为 - 抽象状态 State OrderState - 具体状态 ConcreteState ToBePaidState PaidState ToBeDeliveredState DeliveredState ReceivedState - 环境 Context OrderStateContext - 观察者模式 >> 对象间的一对多的依赖关系 - 抽象主题 Subject Observable(JAVA自带工具类) - 具体主题 ConcreteSubject PorkConcreteSubject - 抽象观察者 Observer Observer(JAVA自带工具类) - 具体观察者 ConcreteObserver PigDealerObserver PigEatersObserver PigFarmersObserver - 备忘录模式 >> 在不破坏封装的前提下,保持对象的内部状态 - 发起人 Originator LifeOriginator - 备忘录 Memento LifeMemento - 管理者 Caretaker LifeCaretaker - 中介者模式 >> 用一个中介对象来封装一系列的对象交互 - 抽象中介者 Mediator HomeKitMediator - 具体中介者 ConcreteMediator TMallElfMediator - 抽象同事类 Colleague AbstractColleague - 具体同事类 ConcreteColleague ElectricCurtainConcreteColleague RefrigeratorConcreteColleague TvConcreteColleague - 迭代器模式 >> 一种遍历访问聚合对象中各个元素的方法,不暴露该对象的内部结构 - 抽象聚合 Aggregate AbstractAggregate - 具体聚合 ConcreteAggregate CustomAggregate - 抽象迭代器 Iterator Iterator - 具体迭代器 Concretelterator CustomIteratorImpl - 命令模式 >> 将命令请求封装为一个对象,使得可以用不同的请求来进行参数化 - 请求者/调用者 Invoker ShaXianWaiterInvoker - 抽象命令 Command AbstractOrderCommand - 具体命令 ConcreteCommand SteamedDumplingsCommand RiceBowlCommand - 接收者/实现者 Receiver ShaXianKitchenReceiver - 责任链模式 >> 将请求的发送者和接收者解耦,使的多个对象都有处理这个请求的机会 - 抽象处理者 Handler AbstractHandler - 具体处理者 ConcreteHandler FinanceSpecialistHandler FinancialManagerHandler CFOHandler CEOHandler - 访问者模式 >> 在不改变数据结构的前提下,增加作用于一组对象元素的新功能 - 抽象访问者 Visitor Visitor - 具体访问者 ConcreteVisitor CooVisitor CtoVisitor - 抽象元素 Element Element - 具体元素 ConcreteElement SalesTeamElement TechnicalTeamElement - 对象结构 ObjectStructure AnnualReportObjectStructure ##### 单元测试用例 TestBehaviour