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、抽象组件 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、简介 策略模式可以在运行时动态切换类的运行算法策略,将变化的算法策略封装,降低了代码耦合度,只需要根据不同情况更换不同策略即可。 例如:今天是2020-12-24平安夜,今晚去见女票,可以选择送花,也可以选择送苹果,平安夜就是算法使用环境,送花和送苹果就是不同的算法策略。 2、创建算法使用环境 public class ChristmasContext { private ChristmasStrategy christmasStrategy; public ChristmasContext(ChristmasStrategy christmasStrategy){ this.christmasStrategy = christmasStrategy; } public void gift(){ christmasStrategy.gift(); } } 3、创建抽象策略 public interface ChristmasStrategy { public void gift(); } 4、创建具体的策略 public class FlowerStrategy impleme.... 有更新! 策略模式 程序人生
1、简介 委派模式对外隐藏具体实现细节,将任务委派给具体的实现类,spring mvc的DispatcherServlet就是使用了委派模式,根据不同的路径,来调用具体对应的HandlerAdapter。 例如,一个部门由部门经理,程序员和设计师三个角色,程序员和设计师负责具体的工作,部门经理根据不同的任务来选择程序员或者设计师来执行。 2、建立任务执行者 public interface User { public void work(); } public class Programmer implements User { @Override public void work() { System.out.println("java工程师开始工作"); } } public class Designer implements User { @Override public void work() { System.out.println("架构设计师开始工作"); } } 3、建立任务分发者 public class DepartmentManager { private .... 有更新! 委派模式 程序人生
简介 nio主要是通过WatchService、Watchkey和Path来实现文件的监控; 代码实现 public class FileMonitor { private WatchService watcher; public FileMonitor(String directory) throws IOException { watcher = FileSystems.getDefault().newWatchService(); Path path = Paths.get(directory); path.register(watcher, ENTRY_CREATE, ENTRY_MODIFY,ENTRY_DELETE); } @SuppressWarnings("InfiniteLoopStatement") public void watchFile() throws InterruptedException{ while (true) { WatchKey key = watcher.take(); for (WatchEvent<?> event : key.... 有更新! nio监控文件变化 程序人生
mvn install:install-file -Dfile=jar包的路径 -DgroupId=groupId -DartifactId=artifactId -Dversion=版本号 -Dpackaging=jar 执行后,再maven中添加依赖即可; 再改造老项目的时候,会遇到一种情况,项目的开发者再使用jar包的时候,没有使用maven(或其他依赖软件)做依赖管理,此时,若要对老项目进行改造,这些依赖的引入就成了一个问题,如果是常见的类,大概都能判断使用的是哪个依赖,直接引入,但是有些项目使用的依赖很小众,甚至再maven仓库中都找不到,此时就需要自己安装到本地仓库,此时,我么可以将所有的jar解压到本地的一个文件夹中,然后使用everything搜索哪个jar中含有自己的类,就把这个jar安装到本地仓库,这样一个一个的对着找。 例如: 我们现在有个一类不知道是属于哪个jar包的 到everything中搜索结果如下: 发现第一个class所在的包,路径也和代码中的匹配,就将这个依赖,安装到本地仓库,再引入就可以了 有更新! maven安装jar到本地 程序人生