Java 关于接口的设计模式

160 阅读1分钟

一. 工厂方法(FactoryMethod)

	概述: 
		定义一个用于创建对象的接口, 让子类决定实例化那一个类. FactoryMethod使一个类的实例化延迟到其子类
    
	适用性:
		① 当一个类不知道它所必须创建的对象的类的时候
		② 带一个类希望由它的子类来指定它所创建的对象的时候
		③ 当类将创建对象的职责委托给多个帮助子类中的某一个, 并且你希望将哪一个帮助子类是代理者这一信息局部化的时候

编译的时候都是由接口之间进行操作, 运行的时候都是实现类来完成

public class TestFactoryMethod {
    public static void main(String[] args) {
        IWorkFactory studentWorkFactory = new StudentWorkFactory();
        studentWorkFactory.getWork().doWork();

        IWorkFactory teacherWorkFactory = new TeacherWorkFactory();
        teacherWorkFactory.getWork().doWork();
    }
}

interface IWork{
    void doWork();
}

class StudentWork implements IWork{

    @Override
    public void doWork() {
        System.out.println("学生写作业");
    }
}

class TeacherWork implements IWork{

    @Override
    public void doWork() {
        System.out.println("老师批改作业");
    }
}

interface IWorkFactory{
    IWork getWork();
}

class StudentWorkFactory implements IWorkFactory{
    @Override
    public IWork getWork() {
        return new StudentWork();
    }
}

class TeacherWorkFactory implements IWorkFactory{
    @Override
    public IWork getWork() {
        return new TeacherWork();
    }
}

二. 代理模式(Proxy)

  1. 静态代理模式
	概述:
    	为其他对象提供一种代理以控制对这个对象的访问
public class TestProxy {
    public static void main(String[] args) {
        Proxy proxyObject = new ProxyObject();
        proxyObject.action();
    }
}

interface Proxy {
    void action();
}

//  代理类
class ProxyObject implements Proxy {
    Proxy mObj;

    public ProxyObject() {
        System.out.println("    代理类创建成功");
//        创建被代理类
        mObj = new ProxyImpl();
    }

    @Override
    public void action() {
        System.out.println(" 代理类       代码执行 ");
        mObj.action();
        System.out.println(" 代理类       执行结束");
    }
}

//  被代理类
class ProxyImpl implements Proxy {
    @Override
    public void action() {
        System.out.println("-----   被代理类执行开始   -----");
        System.out.println("-----   被代理类正在执行   -----");
        System.out.println("-----   被代理类执行结束   -----");
    }
}