设计模式
#
设计原则
#
单一职责原则 (SRP
)
#
开闭原则 (Open Closed Principle
)
#
里氏替换原则 (Liskov Substitution Principle
)
#
依赖倒置原则 (Dependence Inversion Principle
)
#
接口隔离原则 (Interface Segregation Principle
)
#
迪米特原则 (Demeter Principle
)
#
创建型模式
#
简单工厂模式
#
工厂方法模式
#
抽象工厂模式
#
建造者模式
#
单例模式
#
结构型模式
#
适配器模式
#
桥接模式
#
装饰模式
#
外观模式
#
享元模式
#
代理模式
#
组合模式
#
适配器模式、装饰模式、代理模式有哪些异同?
#
- 适配器模式
- 代理模式
- 代理模式的特点在于隔离,隔离调用类和被调用类的关系,通过一个代理类去调用。
- 代理模式是与原对象实现同一个接口
- 代理模式一定是自身持有这个对象,不需要从外部传入。而装饰模式的一定是从外部传入。
- 装饰器模式
- 原有的不能满足现有的需求,对原有的进行增强。
- 装饰器模式特点在于增强,他的特点是被装饰类和所有的装饰类必须实现同一个接口,而且必须持有被装饰的对象,可以无限装饰。
- 装饰器模式与代理模式实现原接口
- 都持有原对象
- 装饰器模式构造函数接收老对象
- 适配器模式与代理模式自己 new 老对象
/**
* 原接口,需要传入 orderId,时间
*/
public interface SourceOrderApi {
public void updateDate(String orderId, String date, String client);
}
public class SourceOrderApiImpl implements SourceOrderApi{
@Override
public void updateDate(String orderId, String date, String client) {
System.out.println(client+"已将订单"+orderId+"的有效期延长至"+date);
}
}
public class Test {
public static void main(String[] args) {
SourceOrderApi sourceOrderApi = new SourceOrderApiImpl();
sourceOrderApi.updateDate("123456", "2014-10-15", "user");
}
}
/**
* 适配器模式
*/
public interface AppOrderApi {
//只需要传入订单Id即可
public void updateDate(String orderId, String client);
}
public class AppOrderApiImpl implements AppOrderApi{
SourceOrderApi sourceOrderApi;
public AppOrderApiImpl(){
sourceOrderApi = new SourceOrderApiImpl();
}
@Override
public void updateDate(String orderId,String client) {
//这里适配的方式随意,但是保证是要完全兼容原有的,就是保证调用原有的接口
sourceOrderApi.updateDate(orderId, "9999-12-31", client);
}
}
public class Test {
public static void main(String[] args) {
AppOrderApi appOrderApi = new AppOrderApiImpl();
appOrderApi.updateDate("123456", "user");
}
}
/**
* 代理模式
*/
public class ProxySourceOrderApiImpl implements SourceOrderApi {
SourceOrderApi sourceOrderApi;
public ProxySourceOrderApiImpl(){
sourceOrderApi = new SourceOrderApiImpl();
}
@Override
public void updateDate(String orderId, String date, String client) {
//进行判断,如果是admin则更新否则让其输入账号密码
if("admin".equals(client)){
sourceOrderApi.updateDate(orderId, date, client);
}else{
System.out.println("账号不是admin,没有查询权限,请输入以admin操作");
}
}
}
/**
* 装饰器模式
*/
public class NewSourceOrderApiImpl implements SourceOrderApi {
SourceOrderApi sourceOrderApi;
public NewSourceOrderApiImpl(SourceOrderApi sourceOrderApi){
this.sourceOrderApi = sourceOrderApi;
}
@Override
public void updateDate(String orderId, String date, String client) {
sourceOrderApi.updateDate(orderId, date, client);
System.out.println(client+"已将订单"+orderId+"的退款期延长至"+date);
}
}
行为型模式
#
命令模式
#
中介者模式
#
观察者模式
#
状态模式
#
策略模式
#
模板方法模式
#
迭代子模式
#
责任链模式
#
备忘录模式
#
访问者模式
#
解释器模式
#
其他模式
#
并发型模式
#
线程池模式
#
叶王 © 2013-2024 版权所有。如果本文档对你有所帮助,可以请作者喝饮料。