然后对 WebSite 和 ConcreteWebSite 的 use() 方法进行修改,添加 User 参数:
public abstract class WebSite { abstract void use(User user); } public class ConcreteWebSite extends WebSite { private String name; public ConcreteWebSite(String name) { this.name = name; } @Override void use(User user) { System.out.println("网站分类:" + name + " 用户:" + user.getName()); } }最后修改一下 Client 类:
public class Client { public static void main(String[] args) { WebSiteFactory factory = new WebSiteFactory(); WebSite fx = factory.getWebSiteCategory("视频站"); fx.use(new User("tom")); WebSite fy = factory.getWebSiteCategory("视频站"); fy.use(new User("cat")); WebSite fz = factory.getWebSiteCategory("视频站"); fz.use(new User("nginx")); WebSite fa = factory.getWebSiteCategory("图文站"); fa.use(new User("apache")); WebSite fb = factory.getWebSiteCategory("图文站"); fb.use(new User("netty")); WebSite fc = factory.getWebSiteCategory("图文站"); fc.use(new User("jboss")); System.out.println("网站分类总数为:" + factory.getWebSiteCount()); } }最终结果:
网站分类:视频站 用户:tom 网站分类:视频站 用户:cat 网站分类:视频站 用户:nginx 网站分类:图文站 用户:apache 网站分类:图文站 用户:netty 网站分类:图文站 用户:jboss 网站分类总数为:2这样就可以协调内部与外部状态,哪怕接手了上千个网站的需求,只要要求相同或类似,实际开发代码也就是分类的那几种。