学习笔记-编程中常见设计模式(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类里,这样就起到了解耦的作用.