1、简介 装饰器模式可以实现动态的给一个类添加新的职责。当然也可也通过子类来实现这一操作,但是这样的话,子类就会继承父类的方法和属性,当父类的发生改变,会影响到子类。装饰器模式会产生很多子类,后期难以维护。 2、抽象组件 public interface User { public void sayHello(); } 3、具体抽象组件 public class Student implements User { @Override public void sayHello() { System.out.println("我是student"); } } 4、装饰角色 public abstract class UserDecorator implements User { private User user; public UserDecorator(User user){ this.user = user; } @Override public void sayHello() { user.sayHello(); } public abstract void sayGoodBy.... 有更新! 装饰器模式 程序人生
1、简介 原型模式是创建型模式,通过拷贝原型创建新的对象,在重复创建复杂对象占用较多系统资源时,可以考虑使用原型模式。 原型模式使用 clone 能够动态的抽取当前对象运行时的状态并且克隆到新的对象中,新对象就可以在此基础上进行操作而不损坏原有对象;而 new 只能得到一个刚初始化的对象。 2、创建原型 在Java中,需要实现Cloneable接口,并重写Object中的clone方法,如果不实现Cloneable接口,就会抛出CloneNotSupportedException异常 public class User implements Cloneable { private String username; private String sex; public User(){} public User(String userInfo){ String[] userInfos = userInfo.split("-"); this.setUsername(userInfos[0]); this.setSex(userInfos[1]); } public String getUse.... 有更新! 原型模式 程序人生
1、简介 观察者模式定义了一种一对多的依赖关系,当一个对象的状态发生变化,所有依赖于它的对象都能得到通知,其实就是发布/订阅的关系。 2、建立LOL游戏(发布者) LOL游戏中有两个队列,一个普通用户列表,一个VIP用户列表 public class Lol { private List<User> normalUser = new ArrayList<>(); private List<User> vipUser = new ArrayList<>(); /** * 发送给普通玩家的信息 */ private String normalUserMessage; /** * 发送给Vip玩家的信息 */ private String vipUserMessage; /** * 添加一个普通用户 * @param user 用户 */ public void attachNormalUser(User user){ normalUser.add(user); } /** * 添加一个VIP用户 * @param user 用户 */ pu.... 有更新! 观察者 程序人生
1、简述 模板方法是定义一个算法骨架,将特定步骤交给子类处理,这样子类就可以根据自己的需求,重新定义特定步骤。 2、建立一个游戏启动模板 public abstract class GameTemplate { public abstract void init(); public abstract void start(); public void play(){ init(); start(); } } 3、CF public class Cf extends GameTemplate { @Override public void init() { System.out.println("初始化cf环境"); } @Override public void start() { System.out.println("启动cf"); } } 4、LOL public class Lol extends GameTemplate { @Override public void init() { System.out.println("初始化lol环境"); } @Override.... 有更新! 模板方法 程序人生
1、简述 适配器模式使原本由于接口不兼容而不能一起工作的那些类可以一起工作。 适配器模式分为类适配器模式和对象适配器模式,却别在于被适配的对象是通过继承还是组合来完成。 适配器实现了接口转换,在不修改客户端或者目标类的前提下,使得目标类与客户端的接口兼容。 例如现在有一个220V的充电器,用户希望新增一个功能让这个充电器可以适配22V的设备,但是同时也需要保留220V的充电功能,这个时候就需要使用适配器模式,来保留他原来的功能,同时新增功能。 2、类适配器 类适配器通过继承被适配的对象来实现新接口功能的适配,ChargerAdapter中,继承charger220V保留了原来的方法,同时实现了新功能。在下面的代码中,Charger220V就是要适配的对象。 public class Charger220V { public int charging(){ System.out.println("输出220V电压"); return 220; } } public interface Charger100V { public int charging(); } public clas.... 有更新! 适配器模式 程序人生
1、定义类注解和方法注解 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface TypeAnnotation { String value() default "这是类注解"; } @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface MethodAnnotation { String value() default "这是方法注解"; } 2、处理注解 此处通过反射拿到类对象,获取注解,来操作。 再生产中也可以结合切面编程来处理注解,或者扫描指定包下的所有类,遍历处理注解 public class AnnotationHandler { public static void main(String[] args){ //可以配置扫描路径加载所有class,也可以使用aspectj直接做前面处理 Class aClass .... 有更新! 自己定义一个注解 程序人生