【代码体现】:成员变量
【箭头及指向】:带实心菱形的实线,菱形指向整体
【代码表现】:局部变量、方法的参数或者对静态方法的调用
【箭头及指向】:带箭头的虚线,指向被使用者
泛化=实现>组合>聚合>关联>依赖
//抽象产品角色
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();
}
}
abstractclassStrategy{
//算法方法
publicvoidAlgorithmInterface();
}
publicclassConcreteStrategyAextendStrategy{
//算法A实现方法
publicvoidAlgorithmInterface(){
//算法A实现方法
}
}
publicclassConcreteStrategyBextendStrategy{
//算法B实现方法
publicvoidAlgorithmInterface(){
//算法B实现方法
}
}
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();
}
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();