Add files via upload
This commit is contained in:
		| @@ -0,0 +1,45 @@ | |||||||
|  | package com.iluwatar.dependency.injection; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * The MIT License | ||||||
|  |  * Copyright (c) 2014-2017 Ilkka Seppälä | ||||||
|  |  * | ||||||
|  |  * Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
|  |  * of this software and associated documentation files (the "Software"), to deal | ||||||
|  |  * in the Software without restriction, including without limitation the rights | ||||||
|  |  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||||
|  |  * copies of the Software, and to permit persons to whom the Software is | ||||||
|  |  * furnished to do so, subject to the following conditions: | ||||||
|  |  * | ||||||
|  |  * The above copyright notice and this permission notice shall be included in | ||||||
|  |  * all copies or substantial portions of the Software. | ||||||
|  |  * | ||||||
|  |  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||||
|  |  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||||
|  |  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||||
|  |  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||||
|  |  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||||
|  |  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||||
|  |  * THE SOFTWARE. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * | ||||||
|  |  * AdvancedSorceress implements inversion of control. It depends on abstraction that can be injected | ||||||
|  |  * through its setter. | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  | public class AdvancedSorceress implements Wizard { | ||||||
|  |  | ||||||
|  |     private Tobacco tobacco; | ||||||
|  |  | ||||||
|  |     public void setTobacco(Tobacco tobacco) { | ||||||
|  |         this.tobacco = tobacco; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void smoke() { | ||||||
|  |         tobacco.smoke(this); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -1,17 +1,17 @@ | |||||||
| /** | /** | ||||||
|  * The MIT License |  * The MIT License | ||||||
|  * Copyright (c) 2014-2016 Ilkka Seppälä |  * Copyright (c) 2014-2016 Ilkka Seppälä | ||||||
|  * |  * <p> | ||||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy |  * Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
|  * of this software and associated documentation files (the "Software"), to deal |  * of this software and associated documentation files (the "Software"), to deal | ||||||
|  * in the Software without restriction, including without limitation the rights |  * in the Software without restriction, including without limitation the rights | ||||||
|  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||||
|  * copies of the Software, and to permit persons to whom the Software is |  * copies of the Software, and to permit persons to whom the Software is | ||||||
|  * furnished to do so, subject to the following conditions: |  * furnished to do so, subject to the following conditions: | ||||||
|  * |  * <p> | ||||||
|  * The above copyright notice and this permission notice shall be included in |  * The above copyright notice and this permission notice shall be included in | ||||||
|  * all copies or substantial portions of the Software. |  * all copies or substantial portions of the Software. | ||||||
|  * |  * <p> | ||||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||||
| @@ -36,12 +36,13 @@ import com.google.inject.Injector; | |||||||
|  * naive implementation violating the inversion of control principle. It depends directly on a |  * naive implementation violating the inversion of control principle. It depends directly on a | ||||||
|  * concrete implementation which cannot be changed. |  * concrete implementation which cannot be changed. | ||||||
|  * <p> |  * <p> | ||||||
|  * The second wizard ({@link AdvancedWizard}) is more flexible. It does not depend on any concrete |  * The second and third wizards({@link AdvancedWizard} and {@link AdvancedSorceress}) are more flexible. | ||||||
|  * implementation but abstraction. It utilizes Dependency Injection pattern allowing its |  * They do not depend on any concrete implementation but abstraction. They utilizes Dependency Injection | ||||||
|  * {@link Tobacco} dependency to be injected through its constructor. This way, handling the |  * pattern allowing their {@link Tobacco} dependency to be injected through constructor ({@link AdvancedWizard}) | ||||||
|  * dependency is no longer the wizard's responsibility. It is resolved outside the wizard class. |  * or setter ({@link AdvancedSorceress}). This way, handling the dependency is no longer the wizard's | ||||||
|  |  * responsibility. It is resolved outside the wizard class. | ||||||
|  * <p> |  * <p> | ||||||
|  * The third example takes the pattern a step further. It uses Guice framework for Dependency |  * The fourth example takes the pattern a step further. It uses Guice framework for Dependency | ||||||
|  * Injection. {@link TobaccoModule} binds a concrete implementation to abstraction. Injector is then |  * Injection. {@link TobaccoModule} binds a concrete implementation to abstraction. Injector is then | ||||||
|  * used to create {@link GuiceWizard} object with correct dependencies. |  * used to create {@link GuiceWizard} object with correct dependencies. | ||||||
|  * |  * | ||||||
| @@ -60,6 +61,10 @@ public class App { | |||||||
|         AdvancedWizard advancedWizard = new AdvancedWizard(new SecondBreakfastTobacco()); |         AdvancedWizard advancedWizard = new AdvancedWizard(new SecondBreakfastTobacco()); | ||||||
|         advancedWizard.smoke(); |         advancedWizard.smoke(); | ||||||
|  |  | ||||||
|  |         AdvancedSorceress advancedSorceress = new AdvancedSorceress(); | ||||||
|  |         advancedSorceress.setTobacco(new SecondBreakfastTobacco()); | ||||||
|  |         advancedSorceress.smoke(); | ||||||
|  |  | ||||||
|         Injector injector = Guice.createInjector(new TobaccoModule()); |         Injector injector = Guice.createInjector(new TobaccoModule()); | ||||||
|         GuiceWizard guiceWizard = injector.getInstance(GuiceWizard.class); |         GuiceWizard guiceWizard = injector.getInstance(GuiceWizard.class); | ||||||
|         guiceWizard.smoke(); |         guiceWizard.smoke(); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user