`
racingbird
  • 浏览: 23969 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

工厂与匿名内部类

阅读更多

 

 

	// 匿名内部类 & 工厂方法
	interface Service{
		void method1();
		void method2();
	}

	interface ServiceFactory{
		Service getService();
	}

	class Implementation1 implements Service{
		private Implementation1(){}
		public void method1(){
			System.out.println("Implementation1 methdo1");
		}
		public void method2(){
			System.out.println("Implementation1 methdo2");
		}
		public static ServiceFactory factory = new ServiceFactory(){
			public Service getService() {
				return new Implementation1();
			}
		};
	}

	class Implementation2 implements Service{
		private Implementation2(){};
		public void method1() {
			System.out.println("Implementation2 methdo1");
		}
		public void method2() {
			System.out.println("Implementation2 methdo2");
		}
		public static ServiceFactory factory = new ServiceFactory(){
			public Service getService(){
				return new Implementation2();
			}
		};
	}

	public class Factories {
		public static void serviceConsumer(ServiceFactory fact){
			Service s =fact.getService();
			s.method1();
			s.method2();
		}
		
		public static void main(String[] args){
			serviceConsumer(Implementation1.factory);
			serviceConsumer(Implementation2.factory);
		}
	}

 

这样类似,一个工厂来应付一种服务。 具体例子:

 

 

package InnerClass;

interface Game{
	boolean move();
}
interface GameFactory{
	Game getGame();
}
class Checkers implements Game{
	private Checkers(){}
	private int moves = 0;
	private static final int MOVES = 3;
	public boolean move(){
		System.out.println("Checkers move "+moves);
		return ++moves != MOVES;
	}
	public static GameFactory factory = new GameFactory(){
		public Game getGame(){
			return new Checkers();
		}
	};
}
class Chess implements Game{
	private Chess(){}
	private int moves = 0;
	private static final int MOVES = 4;
	public boolean move(){
		System.out.println("Chess move "+moves);
		return ++moves != MOVES;
	}
	public static GameFactory factory = new GameFactory(){
		public Game getGame(){
			return new Chess();
		}
	};
}
public class Games {
	public static void playGame(GameFactory factory){
		Game s = factory.getGame();
		while(s.move()){
		}
	}
	public static void main(String[] args){
		playGame(Checkers.factory);
		playGame(Chess.factory);
	}
}

 

 

 

PS:摘自Thinking in Java

分享到:
评论

相关推荐

    匿名内部类代码

    描述中的"the different code of create factory"提到了工厂模式的创建方式多样性,这与匿名内部类的运用有关。工厂模式是一种设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们通过一个工厂方法来创建...

    匿名内部类解读代码

    总结来说,"匿名内部类解读代码"的主题探讨了如何利用匿名内部类的特性,与传统的工厂模式相结合,以更灵活、更简洁的方式创建对象。通过"FactoryTest2"和"FactoryTest"的对比,我们可以学习到如何在不同场景下选择...

    非常精简的匿名内部类详解.docx

    下面我们将深入探讨匿名内部类的定义、使用场景以及其与普通类的区别。 首先,匿名内部类可以分为两种类型:继承类的匿名内部类和实现接口的匿名内部类。在提供的内容中,主要讨论的是实现接口的匿名内部类。当需要...

    使用Java匿名内部类实现一个简单的线程池.txt

    ### 使用Java匿名内部类实现一个简单的线程池 #### 一、引言 在现代软件开发中,线程池是管理并发任务的重要工具之一。它能够有效地控制运行中的线程数量,合理分配系统资源,避免频繁创建销毁线程带来的性能开销...

    接口,内部类,抽象类概念和区别

    内部类分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。成员内部类就像普通的类成员,可以有自己的访问修饰符;局部内部类只存在于方法或块的范围内;匿名内部类通常用于快速创建一个简单的类实例,...

    工厂模式(简单工厂,普通工厂,抽象工厂)代码java

    在软件设计模式中,工厂模式是一种非常...在实际项目中,工厂模式经常与其他设计模式(如策略模式、建造者模式等)结合使用,以解决更复杂的问题。阅读并理解这些代码有助于深入理解工厂模式及其在Java编程中的应用。

    java语言--内部类总结

    - 匿名内部类:没有名称的内部类,通常用于实现接口或抽象类的快速定义,常见于事件处理和回调机制中。 3. 使用方法 - 成员内部类的使用: - 外部类的非静态方法可以通过创建内部类的实例来访问成员内部类的方法...

    内部类和设计模式1

    根据定义的位置,内部类可以分为四种类型:成员内部类、局部内部类、静态内部类和匿名内部类。 1. **成员内部类** - 成员内部类就如同外部类的成员一样,与成员变量和成员方法处于同一级别。 - 声明:`public ...

    java内部类学习资料

    2. **匿名内部类**:这是一种没有名字的内部类,通常用于创建一次性使用的类。匿名内部类可以继承一个类或实现一个接口,并且可以在声明的同时直接实例化。它们常用于简化代码,尤其是在事件处理和回调机制中。 3. ...

    java内部类

    这样的类可以是成员内部类、局部内部类、匿名内部类或静态内部类,每种都有其特定的用途和规则。让我们深入探讨这些内部类的概念、用法以及它们在实际开发中的应用。 首先,成员内部类是最常见的一种,它如同其他...

    Java面向对象设计最佳实践_-_内置类设计

    - 工厂模式:匿名内部类可以简化创建对象的过程。 - 观察者模式:内部类可以作为事件监听器。 9. **注意事项**: - 内部类会增加内存开销,因为每个内部类实例都会隐式包含一个外部类实例的引用。 - 非静态内部...

    Java内部类详解

    匿名内部类是一种特殊的局部内部类,它们经常用于实现接口或继承抽象类的简单场景。匿名内部类没有名字,它们通常是在声明的同时被创建和初始化。 在使用内部类时,开发者需要注意以下几点: - 内部类可以访问外部...

    Java基础经典案例源码

    内部类分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。这些案例可能会展示它们各自的用途和用法。 - 成员内部类可以直接访问外部类的所有成员,包括私有成员,这在设计模式中常用于表示组件间的...

    java代码-日常练习45,内部类

    内部类可以是成员内部类、局部内部类、匿名内部类或者静态内部类,每种都有其特定的用途和使用场景。在日常编程实践中,内部类能够帮助我们更好地组织代码,实现更复杂的设计模式。 1. 成员内部类:成员内部类就像...

    PHP7匿名类用法分析

    - 在某些设计模式中,如工厂模式,匿名类可以用来创建特定的实例,而无需定义额外的类文件。 - 当需要对现有的类进行轻量级的扩展时,可以使用匿名类来实现。 5. **示例代码**: ```php // 匿名类继承自common...

    东北大学 基础实训设计 javaswing图形化界面 云工厂

    此外,我们还需要理解事件监听机制,用匿名内部类或接口实现ActionListener,以便处理按钮点击和其他用户交互。 对于云工厂中的数据展示,JLabel和JTextComponent可以用来显示静态和动态信息,而JTable则适用于展示...

    这样学Java不枯燥》课件1-5.pptx

    - 根据访问权限的不同,内部类可以分为四种:成员内部类、局部内部类、静态内部类和匿名内部类。 #### 成员内部类 - 成员内部类是定义在外部类成员位置的类。 - 成员内部类可以直接访问外部类的所有成员(包括私有...

    040225_wangbin_4Interfaceinnerclass.pptx

    内部类是定义在另一个类内部的类,可以是嵌套内部类(在类的作用域内)、局部内部类(在方法的作用域内)或匿名内部类(不需要显式命名的类)。它们提供了封装和抽象的额外层次,可以在需要时提供更灵活的设计选择。...

    java第七章高级类特性.rar

    2. **内部类**:Java允许在类内部定义其他类,包括成员内部类、局部内部类、匿名内部类和静态内部类。这种设计允许更紧密的封装和更复杂的逻辑结构,例如事件监听器的实现。 3. **枚举(Enum)**:枚举是Java中的一...

    Java面试之——代码与编程题

    - **匿名内部类**:没有名字的内部类,通常用于实现接口或抽象类的快速简洁实现。 - **静态内部类**:可以独立于外部类实例存在,但仍然能访问外部类的静态成员。 在选择题中,可能询问哪些内部类声明是有效的。...

Global site tag (gtag.js) - Google Analytics