【代码体现】:成员变量
【箭头及指向】:带实心菱形的实线,菱形指向整体
【代码表现】:局部变量、方法的参数或者对静态方法的调用
【箭头及指向】:带箭头的虚线,指向被使用者
泛化
=
实现
>
组合
>
聚合
>
关联
>
依赖
//抽象产品角色
public
interface
Car{
public
void drive();
}
//具体产品角色
public
class
Benz
implements
Car{
public
void drive()
{
System.out.println("Driving Benz ");
}
}
public
class
Bmw
implements
Car{
public
void drive()
{
System.out.println("Driving Bmw ");
}
}
//工厂类角色
public
class
Driver{
//工厂方法.注意 返回类型为抽象产品角色
public
static
Car driverCar(String s)throws
Exception{
//判断逻辑,返回具体的产品角色给Client
if(s.equalsIgnoreCase("Benz"))
return
new
Benz();
else
if(s.equalsIgnoreCase("Bmw"))
return
new
Bmw();
else
throw
new
Exception();
}
}
abstract
class
Strategy{
//算法方法
public
void
AlgorithmInterface();
}
public
class
ConcreteStrategyA extend Strategy{
//算法A实现方法
public
void
AlgorithmInterface(){
//算法A实现方法
}
}
public
class
ConcreteStrategyB extend Strategy{
//算法B实现方法
public
void
AlgorithmInterface(){
//算法B实现方法
}
}
public
class
Context{
Strategy strategy;
public
Context(Strategy strategy){
//初始化时,传入具体的策略对象
this.strategy = strategy;
}
//上下文接口
public
void
ContextInterface(){
//根据具体的策略对象调用其算法方法
strategy.AlgorithmInterface();
}
}
//主函数代码:
public
static
void main(String[] args)
{
Context context;
//由于实例化不同的策略,在调用context.AlgorithmInterface();时,所获得的结果也不同。
context =
new
Context(new
ConcreteStrategyA());
context.AlgorithmInterface();
context =
new
Context(new
ConcreteStrategyB());
context.AlgorithmInterface();
}
public
class
Context{
Strategy strategy =
null;
//声明一个接口对象
public
Context(String type){
//初始化时,在Context类中实现简单工厂的应用。
switch(type){
case
"需求一":
Strategy s1 =
new
ConcreteStrategyA();
strategy = s1;
break;
case
"需求二":
Strategy s2 =
new
ConcreteStrategyB();
strategy = s2;
break;
}
}
public
double
GetResult(){
return strategy..AlgorithmInterface();
}
}
//工厂模式用法
Strategy s =
StrategyFactory.createStrategy(type);
...
= s.GetResult();
//策略与工厂结合
Context c =
Context(type);
...
= c.GetResult();