设计模式
来源:互联网 发布:vb控件适应窗体大小 编辑:程序博客网 时间:2024/06/07 01:23
一、简单工厂
定义产品抽象类
public abstract class Animal { public abstract void eat();}
定义工厂抽象类,返回产品抽象类
public interface Factory { public Animal createAnimal();}
定义实体类,实现产品抽象类
public class Cat extends Animal { @Override public void eat() { System.out.println("猫吃鱼"); }}public class Dog extends Animal { @Override public void eat() { System.out.println("狗吃肉"); }}
定义工厂实体类,实现工厂抽象类
public class CatFactory implements Factory { @Override public Animal createAnimal() { return new Cat(); }}public class DogFactory implements Factory { @Override public Animal createAnimal() { return new Dog(); }}
编写测试方法
public void test{ DogFactory df = new DogFactory(); Dog d = (Dog) df.createAnimal(); d.eat(); new CatFactory().createAnimal().eat();}
二、简单工厂
定义产品抽象类
public abstract class Animal { public abstract void eat();}
定义实体类,实现产品抽象类
public class Cat extends Animal { @Override public void eat() { System.out.println("猫吃鱼"); }}public class Dog extends Animal { @Override public void eat() { System.out.println("狗吃肉"); }}
创建简单工厂,返回产品
public class AnimalFactory { public static Animal createAnimal(String name){ if (name.equals("dog")) { return new Dog(); }else if (name.equals("cat")) { return new Cat(); }else { return null; } } }
三、适配器模式
创建接口
interface 接口{ void 吃饭(); void 睡觉(); void 学习();}
定义为抽象,目的是不让创建本类对象,本类对象都是空的方法,创建对象调用没有任何意义,适配器类只是一个过度类
abstract class 适配器类 implements 接口{ @Override public void 吃饭() {} @Override public void 睡觉() {} @Override public void 学习() {} }
只重写需要的方法,其他的方法同样拥有,但是不进行重写
class Student extends 适配器类{ @Override public void 学习() {} }
四、单例设计模式
饿汉式
class Singleton{ private Singleton() {}; private static Singleton singleton = new Singleton(); public static Singleton getSingleton(){ return singleton ; }}
懒汉式,单例延迟加载模式
class Singleton{ private Singleton() {}; private static Singleton singleton ; public static Singleton getSingleton(){ if(singleton == null){ synchronized (Singleton.class) { if(singleton == null){ singleton = new Singleton(); } } } return singleton ; }}
五、装饰设计模式
定义一个婴儿的接口,里面有学习的功能
interface Baby{ void study();}
现在有一个小孩实现了婴儿的接口,并学会了他自己的功能
class Child implements Baby{ @Override public void study() { System.out.println("小孩学会爬了"); }}
现在又有一个小男孩,不光学会了自己的功能,也继承过来了小孩已经学会了的功能
class Boy implements Baby{ private Child child; public Boy(Child child) { super(); this.child = child; } @Override public void study() { child.study(); System.out.println("小男孩学会跑了"); }}
测试
public void test{ Boy boy = new Boy(new Child()); boy.study(); }
阅读全文
0 0
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式~~~~~~~~~~
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- jzoj5399 【NOIP2017提高A组模拟10.7】Confess
- 国庆中秋假期训练
- hive udf开发以及永久注册udf函数
- office-word使用技巧——样式&自动多级列表
- eclipse使用
- 设计模式
- BZOJ 1050: [HAOI2006]旅行comf(并查集+类似最小生成树K算法)
- 求圆柱体的体积
- gcc 常用命令
- cmake arm-none-eabi-gcc for stm32 cpp project
- python自动化工具之pywinauto(零)
- django工作机制
- Spring面向切面编程——Spring实现AOP方式——通过注解实现
- C语言 打印前n行杨辉三角形