标签:动物 抽象工厂模式 需求 san 工厂方法 pad str sso ase
前言
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。
使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
在介绍设计模式之前需要先介绍一下面向对象的特性和UML类图。
封装、继承、多态。
在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)
在UML类图中矩形框表示一个类,类分三层,第一层是;类的名称,如果是抽象类,则用斜体显示,第二层表示特性,是字段和属性,第三层表示操作,通常是方法和行为。
注意前面符号,“+”表示public,“-”表示private,“#”表示protected。
【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何具体化父类的所有特征和行为。例如:老虎是动物的一种,即有老虎的特性也有动物的共性。
【箭头指向】:带三角箭头的实线,箭头指向父类
                                                                                   
【箭头指向】:带三角箭头的虚线,箭头指向接口
                                                            
【代码体现】:成员变量
【箭头及指向】:带普通箭头的实心线,指向被拥有者
                                  
【代码体现】:成员变量
【箭头及指向】:带空心菱形的实心线,菱形指向整体
                                            
【箭头及指向】:带实心菱形的实线,菱形指向整体
                                                                              
【代码表现】:局部变量、方法的参数或者对静态方法的调用
【箭头及指向】:带箭头的虚线,指向被使用者
                                           
                                                                               
工厂模式专门负责将大量有共同接口的类实例化,工厂模式可以动态决定将哪一个类实例化,不必事先知道要实例化那一个类。
工厂模式的几种形态:
简单工厂模式:又称静态工厂方法模式。
工厂方法模式:又称多态性工厂模式。
抽象工厂模式:又称 工具箱模式。
   //抽象产品角色  
   publicinterfaceCar{ 
         publicvoiddrive(); 
   } 
   //具体产品角色  
   publicclassBenzimplementsCar{ 
         publicvoiddrive(){ 
           System.out.println("Driving Benz "); 
         } 
   } 
   publicclassBmwimplementsCar{ 
         publicvoiddrive(){ 
         System.out.println("Driving Bmw "); 
         } 
   } 
   //工厂类角色  
   publicclassDriver{ 
           //工厂方法.注意 返回类型为抽象产品角色  
           publicstaticCardriverCar(Strings)throwsException{ 
                 //判断逻辑,返回具体的产品角色给Client  
                 if(s.equalsIgnoreCase("Benz")) 
                       returnnewBenz(); 
                 elseif(s.equalsIgnoreCase("Bmw")) 
                           returnnewBmw(); 
                   elsethrownewException(); 
         } 
   } 
策略模式
Strategy类,定义了所有的支持的算法的公共接口。
       abstractclassStrategy
{
           //算法方法
           publicvoidAlgorithmInterface();
}
ConcreteStrategy类封装了具体的算法或行为,继承Strategy类。
  
   publicclassConcreteStrategyAextendStrategy
{
       //算法A实现方法
       publicvoidAlgorithmInterface(){
               //算法A实现方法
       }
   }
   publicclassConcreteStrategyBextendStrategy{
       //算法B实现方法
       publicvoidAlgorithmInterface(){
               //算法B实现方法
       }
   }
Context类,用一个ConcreteStrategy来配置,维护一个对Strategy对象的引用。
   publicclassContext{
       Strategystrategy;
       publicContext(Strategystrategy){ //初始化时,传入具体的策略对象
           this.strategy=strategy;
       }
       //上下文接口
       publicvoidContextInterface(){   //根据具体的策略对象调用其算法方法
           strategy.AlgorithmInterface();
       }
   }
   //主函数代码:
   publicstaticvoidmain(String[]args){
       Contextcontext;
       //由于实例化不同的策略,在调用context.AlgorithmInterface();时,所获得的结果也不同。
       context=newContext(newConcreteStrategyA());
       context.AlgorithmInterface();
       context=newContext(newConcreteStrategyB());
       context.AlgorithmInterface();
   }
修改Context类
   publicclassContext{
       Strategystrategy=null; //声明一个接口对象
       publicContext(Stringtype){ //初始化时,在Context类中实现简单工厂的应用。
           switch(type){
           case"需求一":
               Strategys1=newConcreteStrategyA();
               strategy=s1;
               break;
           case"需求二":
               Strategys2=newConcreteStrategyB();
               strategy=s2;
               break;
           }
       }
       publicdoubleGetResult(){
           returnstrategy..AlgorithmInterface();
       }
   }
   //工厂模式用法
   Strategys=StrategyFactory.createStrategy(type);
   ...=s.GetResult();
   //策略与工厂结合
   Contextc=Context(type);
   ...=c.GetResult();
策略模式是一种定义一系列算法的方法,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。
优点:
简化单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试,
将一系列行为封装到一个个类中时,可以在这些行为的类中消除条件语句。
只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑运用策略模式处理这种可能性变化。
标签:动物 抽象工厂模式 需求 san 工厂方法 pad str sso ase
原文地址:https://www.cnblogs.com/to-string-hct/p/9362853.html