学习笔记-编程中常见设计模式(1)

学习笔记-编程中常见设计模式(1)

代理模式:
代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。
如果已有的方法在使用的时候需要对原有的方法进行改进,此时有两种办法:
1、修改原有的方法来适应。这样违反了“对扩展开放,对修改关闭”的原则。
2、就是采用一个代理类调用原有的方法,且对产生的结果进行控制。这种方法就是代理模式。
使用代理模式,可以将功能划分的更加清晰,有助于后期维护!
代码如下:

interface Subject {
    void request();
}

class RealSubject implements Subject {
    public void request(){
        System.out.println("RealSubject");
    }
}

class Proxy implements Subject {
    private Subject subject;

    public Proxy(Subject subject){
        this.subject = subject;
    }
    public void request(){
        System.out.println("begin");
        subject.request();
        System.out.println("end");
    }
}

public class Test2 {
    public static void main(String args[]) {
        RealSubject subject = new RealSubject();
        Proxy p = new Proxy(subject);
        p.request();
    }
}

输出内容:
begin
RealSubject
end

外观模式:

外观模式是为了解决类与类之家的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个类中,降低了类类之间的耦合度,该模式中没有涉及到接口


interface Int{
	void startup();
}
class CPU implements Int{
	@Override
	public void startup() {
		System.out.println("cpu start");
	}
}
class Memory implements Int{
	@Override
	public void startup() {
		System.out.println("memory start");
	}
}
class Disk implements Int{
	@Override
	public void startup() {
		System.out.println("disk start");
	}
}
class Computer{  
	//是组合,而非继承。这是与工程模式的显著区别。
	    private CPU cpu;  
	    private Memory memory;  
	    private Disk disk;  

	    public Computer(){  
	        cpu = new CPU();  
	        memory = new Memory();  
	        disk = new Disk();  
	    }  

	    public void startup(){  
	        System.out.println("start the computer!");  
	        cpu.startup();  
	        memory.startup();  
	        disk.startup();  
	        System.out.println("start computer finished!");  
	    }  
}  

public class WGTest{
	public static void main(String[] args) {
		Computert = new Computer();
		t.startup();
	}
}

输出如下:
start the computer!
cpu start
memory start
disk start
start computer finished!

如果我们没有Computer类,那么,CPU、Memory、Disk他们之间将会相互持有实例,产生关系,这样会造成严重的依赖,修改一个类,可能会带来其他类的修改,这不是我们想要看到的,有了Computer类,他们之间的关系被放在了Computer类里,这样就起到了解耦的作用.

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值