public DELL的CPU(); }
public class DELL的硬盘 implements 硬盘 {
public DELL的硬盘(); }
//下面是IBM工厂
public class IBM工厂 implements 电脑生产商 {
private CPU IBM的CPU私有变量=null; private 硬盘 IBM的硬盘私有变量=null; private CPU 制造CPU() {
return new IBM的CPU(); }
private 硬盘 制造硬盘() {
return new IBM的CPU(); }
public 电脑 制造电脑() { try{
IBM的CPU私有变量=this.制造CPU(); IBM的硬盘私有变量=this.制造硬盘();
if(IBM的CPU私有变量!=null&&IBM的硬盘私有变量!=null) retrun (IBM的CPU私有变量+IBM的硬盘私有变量); //组装成IBM电脑 }
catch(Exception e) {
System.out.println(\制造IBM电脑失败!\ } } } }
这样,客户端无法通过命令单生产出一个CPU来,这样抽象才真正成为一个完整产品的工厂,只要向工厂发出生产的命令,一台完整的电脑就生产出来了,而
6
设计模式
工厂怎么生产的,生产了哪些部件,外界就看不见了,外界就知道这个工厂是生产IBM电脑整机的工厂!
DELL电脑工厂一样
/**** 下面来改错, 请指出下面片段的错误*****/ public abstract class Factory{
public abstract Sample creator();
public abstract Sample2 creator(); }
public class SimpleFactory extends Factory{
public Sample creator(){ ...... }
public Sample2 creator(){ ...... } }
public class BombFactory extends Factory{
public Sample creator(){ ...... }
public Sample2 creator(){ ...... } }
思考:上面的代码错在哪??
/************ 改错结束 ***************/ 2,builder模式的理解
作者:罗鹏 Email:luopeng@ec.com.cn
7
设计模式
简单地说,就好象我要一座房子住,可是我不知道怎么盖(简单的砌墙,层次较低),也不知道怎么样设计(建几个房间,几个门好看,层次较高), 于是我需要找一帮民工,他们会砌墙,还得找个设计师,他知道怎么设计,我还要确保民工听设计师的领导,而设计师本身也不干脏活,重活,光是下命令,这里砌一堵墙,这里砌一扇门,这样民工开始建设,最后,我可以向民工要房子了。在这个过程中,设计师是什么也没有,除了他在脑子里的设计和命令,所以要房子也是跟民工要,记住了!
package builder;
public interface Builder {
public void makeWindow(); public void makeFloor(); public Room getRoom(); }
/*************************************************************/ package builder;
public class Designer {
public Designer() { }
public void order(Builder builder) //这些下等人没有知识,没有文化,哈哈,得听我的 {
builder.makeWindow(); builder.makeFloor(); }
public static void main(String[] args) { Designer designer1 = new Designer(); } }
/*************************************************************/ package builder;
public class Mingong implements Builder{ private String window=\ private String floor=\
8
设计模式
public Mingong() { }
public static void main(String[] args) { Mingong mingong1 = new Mingong(); }
public void makeWindow(){ window=new String(\ }
public void makeFloor(){ floor=new String(\ }
public Room getRoom() {
if((!window.equals(\ {
System.out.println(\ return new Room(); }
else return null; } }
/*************************************************************/ package builder; public class Room {
private String window=\ private String floor=\ public Room() { }
public static void main(String[] args) { Room room1 = new Room(); } }
/*************************************************************/
package builder;
public class Client {
public Client() { }
public static void main(String[] args) { Builder mingong=new Mingong();
Designer designer=new Designer();
9
设计模式
designer.order(mingong); mingong.getRoom(); } }
3, 适配器模式的理解
作者:罗鹏 email:luopeng@ec.com.cn public class window的软件 {
public void run(){
System.out.print(\我运行在window上\ }
public void run1(){
System.out.print(\我运行在window上的run1方法\ } }
public class linux的软件 {
public void run(){
System.out.print(\我运行在linux上\ } }
public class 适配器 extends window的软件 {
private linux的软件 软件1; //实际上是聚合的使用 public 适配器(linux的软件 软件变量) {
this.软件1= 软件变量; }
public void run() {
软件1.run(); }
public void run1() {
System.out.print(“已经被adpter改写了”); } }
客户段
10
设计模式
public class test{
public static void main(String args[]) {
linux的软件 test1=new linux的软件(); 适配器 test2=new 适配器(test1); test2.run();
test2.run1(); }
4,Memento 模式理解
作者:罗鹏 email:luopeng@ec.com.cn
Memento