??xml version="1.0" encoding="utf-8" standalone="yes"?> 9?span lang="EN-US">Interpreter(解释?
定义一个操作中法的骨?一些步骤的执行延迟到其子类?
2?span lang="EN-US">MementoQ备忘录模式Q?br />
备忘录模录实际上是对象内部状态的拯Q运行到某个时候可以恢复它原有的状态,在实际开发中我们l常会用到该模式Q但写法可能不一栗?br />
3?span lang="EN-US">Observer
别h说是观察者,我喜Ƣ说q是监听模式Q就是设|一个对象的监听对象Q当被监听对象的状态改变时触发一个事ӞJDK已经提供实现了。需要用到时GOOGLE一样就OK?br />
4?span lang="EN-US">Chain of ResponsibilityQ职责链Q?br />
是一个对象当作一个参C递给不同的对q行职责处理?br />
5?span lang="EN-US">Command
q具体装了,实际开发中用一得也挺多?br />
6?span lang="EN-US">State
7?span lang="EN-US">Strategy({略)
是对法的一U封?br />
8?span lang="EN-US">Mediator(中介?
各个对象之间的交互操作非常多;每个对象的行为操作都依赖彼此Ҏ,修改一个对象的行ؓ,同时会涉及到修改很多其他对象的行?如果使用Mediator模式,可以使各个对象间的耦合松散,只需兛_?Mediator的关p?使多对多的关pd成了一对多的关p?可以降低pȝ的复杂?提高可修Ҏ展?
10?strong>VisitorQ参观者模式)
是遍历c集中的对象?/span>
]]>
为子pȝ提供l一的接口,q个接口叫门在了,客户只需与门面来的交道,内部调用那个功能模块对客L来说是隐藏的。现实生zMd院看病捡药的例子是一L?br />
2、代理模?Proxy)
有两U方式一U是静态代理,另一U是动态代理。代理模式就是ؓ其它对象提供代理以控制对q个对象的访问?br />
3、适配器模式(AdapterQ?br />
两个不兼容的类U合在一起?使用q个模式Ӟ最好以面向接口的方式实一Q而不用ѝ这是一个比较好理解的模块,不需要看例程应该能回忆起它的结构?br />
4、组合模式(CompositeQ?br />
对象以树的形式l合hQ以达成整体与部份的l构。ƈ在类中提供添加,删除Q遍历这三个Ҏ。通常以操象类为父cL实现?br />
5、a漆工模式Q?span lang="EN-US">DecoratorQ?br />
说白了就是给一个类再添加些功能Q通常可以在设计中可以使用l承Q再实现个接口。该模式可以避免q样做,实一Ҏ是在实现接口的类Ҏ中,M一些额外功能函数?br />
6、桥接模式(BridgeQ?o:p>
操象与行ؓ分离?br />
7、n元模?Flyweight)
说白了就是一个Map 用来存储对象Ӟ先判断Map中是否有该对象,如果有就不需再存q。或者要从别的地方联一个对象时Q先在Map里找Q如果找到就不用d的地方了。有点类g一个池。具体实现就不说?br />
]]>
设计模式分类可以说是以类到对象创E来划分的?br />
设计模式有些书是长篇大论Q让我不知所措,俺文化水q低只能从个人的见解上做单的分析Qƈ反简单的思想用到实际开发中?br />
创徏模式?个子模式Q?br />
q?个模式都是创建对象的Q只不是创徏的方式不一P有的对象只能创徏一个;有的对象是通过工厂来生产;有的对象由很多小对象l成Q有整体与部份关p)通过Builder(构?,下面做介l?br />
1?span lang="EN-US">Factory
学习设计模式不是要牢记它是怎么实现的,不要C列子Q只要记住思想可以了Q当你在现实中做设计的时候,让这些思想现在你脑v里,选择最适用你的实现Ҏ?br />
]]>
import java.util.*;
import org.apache.commons.lang.StringUtils;
interface Command{
public void execute();
}
interface Parameter{
public String getCommandType();
}
class Engineer implements Command{
public void execute() {
// TODO Auto-generated method stub
System.out.println("Enginer....");
}
}
class Programer implements Command{
public void execute() {
// TODO Auto-generated method stub
System.out.println("Programer....");
}
}
class Doctor implements Command{
public void execute() {
// TODO Auto-generated method stub
System.out.println("Doctor.............");
}
}
class EngineerParameter implements Parameter{
public String getCommandType() {
// TODO Auto-generated method stub
return "Engineer";
}
}
class CommandProduce{
public static List commandList=new ArrayList();
public CommandProduce(){
commandList.add(new Engineer());
commandList.add(new Programer());
commandList.add(new Doctor());
}
public static Command getCommand(Parameter p){
Iterator it=commandList.iterator();
while(it.hasNext()){
Object c=(Object)it.next();
System.out.println(c.getClass().getName());
if(StringUtils.indexOf(c.getClass().getName(),p.getCommandType())>0){
return (Command)c;
}
}
return null;
}
}
public class CommandImpl {
public static void main(String[] args) {
// TODO Auto-generated method stub
EngineerParameter ep=new EngineerParameter();
CommandProduce cp=new CommandProduce();
(CommandProduce.getCommand(ep)).execute();
}
}
import java.util.*;
class Product extends Observable{//被观察者必l承于Observable
private String pname;
private float price;
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
setChanged();
notifyObservers(pname);
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
setChanged();
notifyObservers(new Float(price));
}
}
class NameObserver implements Observer{ //观察者必d现Observer接口
public void update(Observable arg0, Object arg1) {
if(arg1 instanceof String){
System.out.println("产品?-->"+arg1);
}
}
}
class PriceObserver implements Observer{
public void update(Observable arg0, Object arg1) {
if(arg1 instanceof Float){
System.out.println("产品h?>"+arg1);
}
}
}
public class ObserverImpl {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Product p=new Product();
p.setPname("电脑");
p.setPrice(Float.valueOf("5632.6"));
NameObserver no=new NameObserver();
PriceObserver po=new PriceObserver();
p.addObserver(no);
p.addObserver(po);
p.setPname("W记本电?);
p.setPrice(Float.valueOf("9635.5"));
}
}
import java.io.*;
import java.util.*;
class Originator{
private int number;
private File file;
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public Originator(){}
//创徏备䆾
public Memento getMemento(){
return new Memento(this);
}
//恢复到原始?br /> public void setMemento(Memento m){
this.file=m.getFile();
this.number=m.getNumber();
}
}
class Memento implements Serializable{
private int number;
private File file;
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public Memento(Originator o){
this.number=o.getNumber();
this.file=o.getFile();
}
}
public class MemebtoImpl {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Originator o=new Originator();
o.setNumber(100);
Memento m=o.getMemento();//建备一个备份对?br /> o.setNumber(50); //改变对象属?br /> o.setMemento(m); //q原
System.out.println(o.getNumber());
}
}
abstract class Benchmark{
public abstract void benchmark();
/**
* 重复执行的次?br /> * @param count
* @return
*/
public final long repeat(int count){
long startTime;
if(count<0){
return 0;
}else{
startTime=System.currentTimeMillis();
for(int i=0;i<count;i++){
benchmark();
}
}
long stopTime=System.currentTimeMillis();
return stopTime-startTime;
}
}
class MethodBenchmark extends Benchmark{
public void benchmark() {
for(int i=0;i<200000;i++){
System.out.println("i="+i);
}
}
}
public class TemplateImpl {
/**
* @param args
*/
public static void main(String[] args) {
Benchmark operation=new MethodBenchmark();
long d=operation.repeat(1);
System.out.println("执行一ơ所需要用的时_"+d);
}
}
import java.util.*;
class CD{
private String title;
private int year;
private Artist artist;
public Artist getArtist() {
return artist;
}
public void setArtist(Artist artist) {
this.artist = artist;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
}
class Artist{
private String name;
public String getName(){
return this.name;
}
public Artist(String n){
this.name=n;
}
}
class ArtistFactory{
Hashtable flyweights=new Hashtable();
Artist getArtist(String key){
Artist result;
result=(Artist)flyweights.get(key);
if(result==null){
result=new Artist(key);
flyweights.put(key,result);
}
return result;
}
}
public class FlyweightImpl {
/**
* @param args
*/
public static void main(String[] args) {
CD cd=new CD();
ArtistFactory af=new ArtistFactory();
cd.setArtist(new Artist("?));
cd.setTitle("试");
cd.setYear(1998);
Artist va=af.getArtist("?);
System.out.println(va.getName());
af.getArtist("?);
System.out.println(af.flyweights.size());
}
}
//打方?br />class SquarePeg{
public void insert(String str){
System.out.println("打方?->"+str);
}
}
//打圆柱型
class RoundPeg{
public void insertIntohole(String msg){
System.out.println("打圆柱型-->"+msg);
}
}
class PegAdapter extends SquarePeg{
private RoundPeg rp;
public PegAdapter(RoundPeg vrp){
this.rp=vrp;
}
public void insertRound(String str){
rp.insertIntohole(str);
}
public void insertSquare(String str){
super.insert(str);
}
}
public class AdapterImpl {
/**
* @param args
*/
public static void main(String[] args) {
RoundPeg rp=new RoundPeg();
PegAdapter pg=new PegAdapter(rp);
pg.insertRound("圆柱?);
pg.insertSquare("方型");
}
}
class SingletonA{
private SingletonA(){
}
private static SingletonA _instance=new SingletonA();
public static SingletonA getInstance(){
return _instance;
}
}
class SingletonB{
private static SingletonB _instance;
public static SingletonB getInstance(){
if(_instance==null){
return new SingletonB();
}else{
return _instance;
}
}
}
public class SingletonImpl {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
/*
* 产品接口
*/
interface Produce{
public void OutProduceInfo();
}
/*
* 构徏部g
*/
class Director{
private Builder builder;
public Director(Builder vbuilder){
this.builder=vbuilder;
}
public void construct(){
builder.buildPartA();
builder.buildPartB();
}
}
/*
* 部g实现c?br /> */
class PartAImpl implements PartA{
public void builderA() {
// TODO Auto-generated method stub
System.out.print("PartAl装完成...");
}
public void outPartAInfo() {
// TODO Auto-generated method stub
System.out.println("PartA 信息。。?");
}
}
class PartBImpl implements PartB{
public void builderB() {
// TODO Auto-generated method stub
System.out.println("构造部件B完成....");
}
}
class ProduceImpl implements Produce{
private PartA pa;
private PartB pb;
private ProduceImpl(){}
public ProduceImpl(PartA pa,PartB pb){
this.pa=pa;
this.pb=pb;
}
public void OutProduceInfo() {
// TODO Auto-generated method stub
pa.builderA();
pb.builderB();
pa.outPartAInfo();
System.out.println("q里输入了品信息,当然产品q有很多功能Ҏ没写?);
}
}
class Cbuilder implements Builder{
PartA pa;
PartB pb;
public void buildPartA() {
pa=new PartAImpl(); //具体子部件实C?br />
}
public void buildPartB() {
pb=new PartBImpl();
}
public Produce getResult() {
ProduceImpl pi=new ProduceImpl(pa,pb);
return pi;
}
}
public class BuilderImpl {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Cbuilder builder=new Cbuilder();
Director d=new Director(builder);
d.construct();
Produce p=builder.getResult();
p.OutProduceInfo();
}
}
abstract class AbsHello implements Cloneable{
String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public abstract void sayHello();
public Object clone(){
Object object=null;
try{
object=super.clone();
}catch(Exception e){
System.err.println(e);
}
return object;
}
}
class OneHello extends AbsHello{
public OneHello(){
setUsername("peidw");
}
@Override
public void sayHello() {
// TODO Auto-generated method stub
System.out.println("OneHello-->SayHello to "+username);
}
}
class TwoHello extends AbsHello{
public TwoHello(){
setUsername("pxm");
}
@Override
public void sayHello() {
// TODO Auto-generated method stub
System.out.println("TwoHello-->sayHello to "+username);
}
}
public class Prototype {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
AbsHello oneh=new OneHello();
AbsHello twoh=new TwoHello();
oneh.sayHello();
twoh.sayHello();
}
}
interface Me{
public void sayHello();
public void sayBay();
}
class SampleFacotry implements Me{
public void sayHello() {
// TODO Auto-generated method stub
System.out.println("sampleFacotry->SayHello....");
}
public void sayBay() {
// TODO Auto-generated method stub
System.out.println("sampleFacotry->Bay....");
}
}
class PPFacotry implements Me{
public void sayHello() {
// TODO Auto-generated method stub
System.out.println("PPFacotry-->"+"Say Hello");
}
public void sayBay() {
// TODO Auto-generated method stub
System.out.println("PPFacotry-->"+"Say Bay.");
}
}
/**
* 以一般工厂方法构造类
* @author Administrator
*
*/
class CreateFacotry{
public static Me createFacotry(String aa){
if(aa.equalsIgnoreCase("Sample")){
return new SampleFacotry();
}else if(aa.equalsIgnoreCase("")){
return new PPFacotry();
}else{
return null;
}
}
}
/**
* 操象工厂的实现?br /> * @author Administrator
*
*/
abstract class CFacory{
public abstract SampleFacotry mecreator();
public abstract PPFacotry kkmeicreator();
}
class CFacoryImple extends CFacory{
@Override
public SampleFacotry mecreator() {
// TODO Auto-generated method stub
return new SampleFacotry();
}
@Override
public PPFacotry kkmeicreator() {
// TODO Auto-generated method stub
return new PPFacotry();
}
}
public class Facotry {
public static void main(String[] args){
Me a=CreateFacotry.createFacotry("Sample");
a.sayHello();
CFacoryImple cfi=new CFacoryImple();
Me me=cfi.mecreator();
Me ppme=cfi.kkmeicreator();
me.sayBay();
ppme.sayBay();
}
}
以上q个例程Q说明了一般工厂以及操象工厂的实现?br />工厂q个构造模式在开发中会经常用?