设计模式这一块一直在我心头放着,每每闲暇之时都会想起我得去系统的了解一下,并且写一些文章记录学习的过程,算是一本《设计过程学习笔记》吧。
设计模式还有6个原则: 里氏替换, 接口最小化 ,最小知道 ,开闭原则,单一原则,依赖倒置
设计模式有23种 分别是:(参考网络)
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
这篇文章,我将记录装饰器模式的学习过程。
以下图 是 3个类: MapleClass(被装饰类) MapleDecorateAClass(装饰类A) MapleDecorateBClass(装饰类B)
1个接口: MapleInterface
三个类和一个接口具体代码:
MapleClass(被装饰类)
package com.luyo.MapleTest;
/**
* Created by Administrator on 2016/11/15.
*/
public class MapleClass implements MapleInterface {
public void method1() {
System.out.println("this is method1");
}
public void method2() {
System.out.println("this is method2");
}
public void method3() {
System.out.println("this is method3");
}
public static void main(String[] args) {
MapleInterface mapleClass = new MapleClass();
MapleDecorateAClass mapleDecorateAClass = new MapleDecorateAClass(mapleClass);
mapleDecorateAClass.method1();
mapleDecorateAClass.method2();
mapleDecorateAClass.methodA();
MapleDecorateBClass mapleDecorateBClass = new MapleDecorateBClass(mapleDecorateAClass);
mapleDecorateBClass.method1();
mapleDecorateBClass.methodB();
// MapleInterface mapleClass = new MapleClass();
// MapleInterface mapleClassProxy = (MapleInterface) new MapleClassProxy(mapleClass).getProxy();
// mapleClassProxy.method1();
// mapleClassProxy.method2();
// mapleClassProxy.method3();
}
}
MapleDecorateAClass(装饰器A)
package com.luyo.MapleTest;
/**
* Created by Administrator on 2016/11/15.
*/
public class MapleDecorateAClass implements MapleInterface {
private MapleInterface mapleInterface;
public MapleDecorateAClass(MapleInterface mapleInterface) {
this.mapleInterface= mapleInterface;
}
@Override
public void method1() {
System.out.println("A装饰");
mapleInterface.method1();
System.out.println("A装饰结束");
}
@Override
public void method2() {
System.out.println("A装饰");
mapleInterface.method2();
System.out.println("A装饰结束");
}
@Override
public void method3() {
System.out.println("A装饰");
mapleInterface.method3();
System.out.println("A装饰结束");
}
public void methodA() {
System.out.println("this method only in DecorateA");
}
}
MapleDecorateBClass装饰器B
package com.luyo.MapleTest;
/**
* Created by Administrator on 2016/11/15.
*/
public class MapleDecorateBClass implements MapleInterface {
private MapleInterface mapleInterface;
public MapleDecorateBClass(MapleInterface mapleInterface) {
this.mapleInterface = mapleInterface;
}
@Override
public void method1() {
System.out.println("B装饰");
mapleInterface.method1();
System.out.println("B装饰结束");
}
@Override
public void method2() {
System.out.println("B装饰");
mapleInterface.method2();
System.out.println("B装饰结束");
}
@Override
public void method3() {
System.out.println("B装饰");
mapleInterface.method3();
System.out.println("B装饰结束");
}
public void methodB() {
System.out.println("this method only in DecorateB");
}
}
接口MapleInterface
package com.luyo.MapleTest;
/**
* Created by Administrator on 2016/11/15.
*/
public interface MapleInterface {
public void method1();
public void method2();
public void method3();
}