几个用java做的模式的例子

该博客在Windows XP Pro sp1系统和J2SDK 1.4.2等编程环境下,用Java实现了多种设计模式。包括工厂方法模式,以餐具生产为例;门面模式,模拟保安系统;命令模式,模拟看电视者用遥控器控制电视。并给出了各模式的类图和实现代码。

所有程序在以下环境中实:

操作 系统 Windows XP Pro sp1

编程 环境 J2SDK 1.4.2JCreator Pro 2.00

UML工具 Borland Together Architect

参考 书籍 Java与模式》 阎宏 编著

打印 排版 Microsoft Office Word 2003

 

创建模式 —— Factory Method

这是一个描述创建模式工厂方法的例子:一个餐具生产工厂(TablewareFactory),生产

三种餐具:筷子(chopsticts)、餐刀(knife)、餐叉(fork).生产过程使用了factory method Interface Tableware 作为 ForkKnifeChopsticts的公共接口。Interface TablewareMaker作为生产工人ForkMakerKnifeMakerChopMaker的公共接口。类图如下:

实现代码如下

1 - 接口Tableware的实现

package zhijun.javapattern.factorymethod;

public interface Tableware     {     public void getMes();     }

2 – Fork 类的实现

package zhijun.javapattern.factorymethod;

public class Fork implements Tableware

{

       public Fork()                {     System.out.println("A fork is made.");  }    

       public void getMes()      {     System.out.println("This is a fork .");   }    

}

3 – Knife 类的实现

package zhijun.javapattern.factorymethod;

public class Knife implements Tableware

{

       public Knife()                {     System.out.println("A knife is made.");        }

       public void getMes()      {     System.out.println("This is a knife .");  }

}

4 – Chopsticts 类的实现

package zhijun.javapattern.factorymethod;

public class Chopsticks implements Tableware

{

       public Chopsticks()              {     System.out.println("A pair of chopsticks are made.");  }

       public void getMes()      {System.out.println("They are A pair of chopsticks .");              }

}

5 – 接口TablewareMaker 的实现

package zhijun.javapattern.factorymethod;

public interface TablewareMaker   {     public Tableware make();}

6 – ForkMaker 类的实现

package zhijun.javapattern.factorymethod;

public class ForkMaker implements TablewareMaker

{

       public ForkMaker()             {}   

       public Tableware make()              {     return new Fork();        }    

}

7 – KnifeMaker类的实现

package zhijun.javapattern.factorymethod;

public class KnifeMaker implements TablewareMaker

{

       public KnifeMaker()              {}

       public Tableware make()              {     return new Knife(); }   

}

8 – ChopMaker 类的实现

package zhijun.javapattern.factorymethod;

public class ChopMaker implements TablewareMaker

{

       public ChopMaker()             {}

       public Tableware make()              {     return new Chopsticks();      }    

}

9 – 客户端程序TablewareFactory 实现

package client_test;

import zhijun.javapattern.factorymethod.*;

public class TablewareFactory

{

       public static TablewareMaker forkMaker, knifeMaker,chopsticksMaker;          

       public static Tableware fork, knife, chopsticks;  

       public static void main(String [] args)

       {

           forkMaker = new ForkMaker();

              knifeMaker = new KnifeMaker();

              chopsticksMaker = new ChopMaker();       

              fork = forkMaker.make();

              knife = knifeMaker.make();

              chopsticks = chopsticksMaker.make();

       }    

}

 

 

 

 

 

结构模式 —— Facade模式


本例来自《java与模式》。
程序说明:本程序模拟一个保安系统来说明门面模式。这个保安系统由
2个录像机(Camera),2个电灯(Light),一个传感器(Sensor),一个报警器(Alarm)组成。保安系统的操作人员需要经常启动(activate)和关闭(deactivate)这些系统。根据门面模式,设计一个控制台(SecurityFacade),作为保安系统的用户界面。保安系统的操作人员只需要操作这个简化的界面就可以控制所有的仪器。

门面 SecurityFacade 对象承担了与保安系统的内部各个对象打交道的任务,而客户对象只需要与门面对象打交道即可。这是客户端与保安系统之间的一个门户,踏使得客户端与内部程序之间的关系变得简单和易于管理。系统类图如下:

 

源代码如下:

1 – 客户端程序Client .java

package zhijun.javapattern.facade;

public class Client

{

       private static SecurityFacade security;

       public static void main(String [] args)

       {

              security = new SecurityFacade();

              security.activate();

              security.deactivate();     

       }    

}

2 – 门面SecurityFacade.java

package zhijun.javapattern.facade;

public class SecurityFacade

{

       private Camera camera1 = new Camera();

       private Camera camera2 = new Camera();

       private Light light1 = new Light();

       private Light light2 = new Light();

       private Sensor sensor = new Sensor();

       private Alarm alarm = new Alarm();

       public void activate()

       {

              camera1.turnOn();         camera2.turnOn();

              light1.turnOn();             light2.turnOn();

              sensor.activate();           alarm.acticate();    

       }

       public void deactivate()

       {

              camera1.turnOff();        camera2.turnOff();

              light1.turnOff();            light2.turnOff();

              sensor.activate();           alarm.acticate();    

       }    

}

3 – 摄像机Camera.java

package zhijun.javapattern.facade;

public class Camera

{

       public void turnOn()            {     System.out.println("Turn on the camera.");  }    

       public void turnOff()            {     System.out.println("Turn off the camera."); }

       public void rotate(int degrees)

       {     System.out.println("Rotate the camera by " + degrees + "degrees." ); }

}

4 – 电灯 Light.java

package zhijun.javapattern.facade;

public class Light

{

       public void turnOn()            {     System.out.println("Turn on the light.");      }    

       public void turnOff()            {     System.out.println("Turn off the light.");      }

       //更换灯泡

       public void changeBulb()       {     Sysetm.out.println(“Change ths Lighy Bulb”);}

}

5 – 传感器 Sensor.java

package zhijun.javapattern.facade;

public class Sensor

{

       public void activate()            {     System.out.println("Activating the sensor."); }    

       public void deactivate()         {     System.out.println("Deactivating the sensor.");    }

       //触发感应器

       public void trigger()              {     System.out.println("The sensor has been triggered.");  }

}

6 – 报警器 Alarm.java

package zhijun.javapattern.facade;

public class Alarm

{

       public void acticate()     {     System.out.println("Activating the alarm.");         }

       public void deactivate()  {     System.out.println("Deactivating the alarm.");      }    

       //报警铃响

       public void ring()           {     System.out.println("Ring the alarm.");                 }

       //停止报警

       public void stopRing()    {     System.out.println("Stop the alarm.");                 }

}

 

行为模式 —— Command


         本例来自《java与模式》。
         Command
模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分开,委派不同的对象。每一个都是一个操作:请求的一方发出一个请求要执行一个操作;接受的一方收到请求并执行操作。

本例通过模拟一个 看电视者通过遥控器控制电视的系统 来演示Command的应用。

在设计中,TvWatcher(看电视者)扮演客户角色,Controler(遥控器)扮演请求者,TvWatcher通过Controler(遥控器)发出命令,这写命令由电视机接收。 抽象命令角色由一个命令接口(Command)扮演,系统一共有三个具体命令类:OnCommandOffCommandChannelCommand,分别代表3种操作:打开电视、关上电视,换台。Controler(遥控器)把实现操作的细节同客户端分隔开来,TvWatcher(看电视者)只需要操作遥控器(按下相应的按扭)就可以实现对电视的操作(开、关、换台)。

系统的UML类图如下:



其源代码如下:

1 客户端程序

package client_test;

import zhijun.javapattern.command.*;

public class TvWatcher

{

       private static Controler controler; 

       public static void main(String [] args)

       {     test();      }

       public static void test()

       {

              TV myTV = new TV(); 

              OnCommand on = new OnCommand(myTV);

              OffCommand off = new OffCommand(myTV);

              ChannelCommand channel = new ChannelCommand(myTV, 2);       

              controler = new Controler(on, off, channel);

             

              controler.turnOn();

              controler.changeChannel();

controler.turnOff();

       }    

}

 

2 命令接口 Command.java

package zhijun.javapattern.command;

public interface Command

{

       void execute();      

}

3 具体命令OnCommand.java

package zhijun.javapattern.command;

public class OnCommand implements Command

{

       private TV myTV; 

       public OnCommand(TV tv)   {     myTV = tv;    }    

       public void execute()            {     myTV.turnOn();     }

}

4 具体命令 OffCommand.java

package zhijun.javapattern.command;

public class OffCommand implements Command

{

       private TV myTV; 

       public OffCommand(TV tv)  {     myTV = tv;    }    

       public void execute()            {     myTV.turnOff();    }    

}

5 具体命令 ChannelCommand.java

package zhijun.javapattern.command;

public class ChannelCommand implements Command

{

       private TV myTV;

       private int channel;

       public ChannelCommand(TV tv, int channel)

       {

              myTV = tv;

              this.channel = channel;  

       }    

       public void execute()            {     myTV.changeChannel(channel);    }

}

6 命令请求者 Controler.java

package zhijun.javapattern.command;

public class Controler

{

       private Command onCommand, offCommand, channelCommand;    

       public Controler(Command on, Command off, Command channel)

       {

              onCommand = on;

              offCommand = off;

              channelCommand = channel;

       }    

       public void turnOn()             {     onCommand.execute();  }    

       public void turnOff()            {     offCommand.execute(); }    

       public void changeChannel()  {     channelCommand.execute();  }           

}

7 命令接收者 TV.java

package zhijun.javapattern.command;

public class TV

{

       private int currentChannel = 0;     

       public void turnOn()             {     System.out.println("The TV is on.");    }           

       public void turnOff()            {     System.out.println("The TV is off.");    }    

       public void changeChannel(int channel)

       {

              currentChannel = channel;

              System.out.println("Now TV channel is : " + channel);      

       }

}

运行结果截图:

 

<think>好的,用户让我介绍一下用Java设计模式开发的几个例子。首先,我需要确定用户的需求是什么。他们可能正在学习设计模式,想通过具体的例子来理解不同模式的应用场景和实现方式。之前用户询问过Java8流式表达式处理数据,现在转向设计模式,可能是在扩展知识面,或者项目中需要应用设计模式解决问题。 接下来,我需要考虑选择哪些设计模式作为例子。常用的设计模式有单例、工厂、观察者、策略、装饰者等,这些都是比较基础且实用的模式。用户可能希望看到这些模式的典型实现,以及在实际开发中的应用场景。 然后,每个例子需要简洁明了,代码示例要正确,并且有注释说明。同时,用户可能希望了解每个模式的结构和优点,这样他们可以在自己的项目中合理选择和应用。 需要注意的是,用户之前提到的Java8特性,可能在设计模式的实现中也可以结合使用,比如使用Lambda表达式简化某些模式(如策略模式)。但可能用户更关注传统的实现方式,所以需要先给出标准实现,再视情况补充Java8的优化。 还要考虑代码的格式,用户之前的回复中有代码块,所以需要保持一致的格式,使用正确的Java语法,并确保示例能够编译运行。此外,每个模式的应用场景需要具体,让用户明白在什么情况下使用哪种模式。 可能用户是中级开发者,正在复习或准备面试,所以需要例子既有典型性,又有一定的深度,比如单例模式的双重检查锁定,工厂模式中的抽象工厂,观察者模式中的事件监听等。同时,需要指出各模式的优缺点,帮助用户理解如何选择。 最后,总结部分需要将各个模式串联起来,说明它们如何共同提高代码质量,这样用户能有一个整体的认识。确保回答结构清晰,分点明确,方便用户阅读和理解。</think>以下是几个典型设计模式Java中的实现示例,包含代码结构与应用场景说明: --- ### 一、单例模式(Singleton Pattern) **场景**:全局配置管理、数据库连接池 ```java public class AppConfig { private static volatile AppConfig instance; private AppConfig() {} // 私有构造函数 public static AppConfig getInstance() { if (instance == null) { synchronized (AppConfig.class) { if (instance == null) { instance = new AppConfig(); } } } return instance; } // 业务方法 public String getConfig(String key) { return "value"; } } ``` **结构说明**:双重检查锁定(DCL)保证线程安全,volatile防止指令重排序 --- ### 二、工厂模式(Factory Pattern) **场景**:跨平台UI组件创建 ```java // 抽象产品 interface Button { void render(); } // 具体产品 class WindowsButton implements Button { @Override public void render() { System.out.println("Windows风格按钮"); } } // 工厂接口 interface GUIFactory { Button createButton(); } // 具体工厂 class WindowsFactory implements GUIFactory { @Override public Button createButton() { return new WindowsButton(); } } // 客户端调用 public class Client { public static void main(String[] args) { GUIFactory factory = new WindowsFactory(); Button button = factory.createButton(); button.render(); // 输出:Windows风格按钮 } } ``` **扩展性**:新增MacFactory无需修改客户端代码 --- ### 三、
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值